/*
 * config.c
 *
 *  Created on: 06/10/2011
 *      Author: utn_so
 */

/* Funcion Global a los Procesos que permite, obtener datos de cfg, de acuerdo a un Path,un Token y retorna en la direccion de memoria que le
 * pasamos como ultimo parametro  */

#include "config.h"

int32_t liberarMemoria (char **memoriaALiberar)
{
  if (*memoriaALiberar == NULL )
    return 1;
  free(*memoriaALiberar);
  *memoriaALiberar = NULL;
  return 0;
}

int32_t parsearData (char *buffer, char *separador, char *token,
    char **spCadenaObtenida)
{
  int32_t dataEncontrada = 0;
  char *palabra; //Variable local auxiliar
  char *spTokenSafe;
  palabra = strtok_r(buffer , separador , &spTokenSafe);
  if ( (strcmp(palabra , token)) == 0)
    {
      palabra = strtok_r(NULL , "\n" , &spTokenSafe);
      if (palabra != NULL)
        {
          *spCadenaObtenida = ( char*) malloc(
              sizeof(char) * (strlen(palabra) + 1));
          strcpy(*spCadenaObtenida , palabra);
        }
      else
    	  *spCadenaObtenida = NULL;
      dataEncontrada = 1;
      return dataEncontrada;
    }
  return dataEncontrada;
}

int32_t leerConfiguracion (const char *spPathCfg, char *spToken,
    char **spCadenaObtenida)
{

  FILE* fichero;
  char buffer [TAMSECTOR];

  int32_t encontreEntrada = 0;
  if ( (fichero = fopen(spPathCfg , "r")) == NULL)
    {
      printf("El archivo de configuracion \"%s\" no existe.\n" , spPathCfg);
      return Retorno_Error;
    }
  while (feof(fichero) == 0)
    {
      fgets(buffer , sizeof (buffer) , fichero);
      encontreEntrada = parsearData(buffer , "=" , spToken , spCadenaObtenida);
      if (encontreEntrada == 1)
        {
          fclose(fichero);
          return Retorno_OK;
        }

    }

  printf("No se encontro la expresion en la cfg\n");
  fclose(fichero);
  return Retorno_Error;
}
